在物件導向程式語言中,我們將程式法擬人化,讓設計者更方便使用程式碼,而「物件」本身含有「狀態」與「行為」,因此物件應有自己的運作方式。
當我們將訊息傳給物件,物件便會回應我們的需求,不一定需要了解物件內實際的運作方式。而這個允許我們要求物件執行的工作,就稱之為方法(method)。
*首先:定義方法
在Ruby世界,使用def
...end
來定義方法。
後面加上括號()
可以傳入參數,若想要傳多個參數可以使用逗號,
。
def eat(food)
puts "So delicious #{food}"
end
*第二:呼叫方法
方法定義好在那邊,其實是無法使用的,若我們要執行已經定義好的方法,可以利用:
.
來呼叫方法,接收的物件位於符號左側。send
來呼叫。# 1.點符號
foo = "abc"
puts foo.length -> 3
foo = ["abcde", "fghij"]
puts foo.length -> 2
# 2.直接呼叫
def eat(food)
puts "So delicious #{food}!"
end
eat("tofu") -> # So delicious tofu!
# 省略小括號直接呼叫
eat "tofu" -> # So delicious tofu!
# 3.send呼叫
def eat
puts "So delicious!"
end
send(:eat) -> # So delicious!
PS:
由於Ruby省略小括號的關係,使得方法看起來跟區域變數長得一樣,若同一個範圍內遇到兩者,該如何分別印出呢?
eat = tofu # eat變數指向tofu
def eat # 定義eat 方法有vegetables
vegetables
end
put eat -> # tofu
put eat() -> # vegetables
以上例子可以得知,兩者同時存在會以區域變數為優先,若要呼叫方法,加上()
就可以囉!